#include "mmulayout.h"
#include "type.h"

#include "fs/disk.h"
#include "fs/fat32.h"

#include "dbg.h"

extern bool is_shift;

#ifndef QEMU
#include "fs/dmac.h"
#include "fs/sdcard.h"
#else
#include "fs/virtio.h"
#endif

void
disk_init(void) {
    __DEBUG_FUNC_START;
#ifndef QEMU
    sdcard_init();
#else
    virtio_disk_init();
#endif
    __DEBUG_FUNC_END;
}

void
disk_read(uint8_t* buf, uint32_t secNo) {
    // __DEBUG_FUNC_START;
    if (is_shift)
        secNo += 2048;
#ifndef QEMU
    sdcard_read_sector(buf, secNo);
#else
    virtio_disk_rw(buf, secNo, 0);
#endif
    // __DEBUG_FUNC_END;
}

void
disk_write(uint8_t* buf, uint32_t secNo) {
    // __DEBUG_FUNC_START;
    if (is_shift)
        secNo += 2048;
#ifndef QEMU
    sdcard_write_sector(buf, secNo);
#else
    virtio_disk_rw(buf, secNo, 1);
#endif
    // __DEBUG_FUNC_END;
}

void
disk_intr(void) {
#ifndef QEMU
    dmac_intr(DMAC_CHANNEL0);
#else
    virtio_disk_intr();
#endif
}
